<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>查询字符串压缩技术</title>
</head>

<body>
    <!-- 
        使用replace方法，处理匹配到的信息
    -->

    <script>
        function compress(source) {
            const keys = {}

            // 将出现过的字符统计 分类
            String.prototype.replace.call(source, /([^=&]+)=([^&]*)/g, (full, key, value) => {

                console.log(full, key, value)

                // 存在就统计 不存在则立马创建
                keys[key] = (keys[key] ? keys[key] + ', ' : '') + value
            })

            console.log(keys)
            const result = []

            // 将对象里的数据提取到数组中
            for (const key in keys) {
                if (Object.hasOwnProperty.call(keys, key)) {
                    result.push(`${key} = ${keys[key]}`)
                }
            }
            console.log(result)

            // 将数组重新拼接为字符串数据
            return result.join(' & ')
        }

        console.log(compress('a=1&b=2&a=3&b=4')) // a = 1, 3 & b = 2, 4
    </script>

</body>

</html>